package cbm.admin.controller;

import java.util.Date;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.ModelAndView;

import cbm.commons.BaseController;
import cbm.commons.ConstantsWeb;
import cbm.commons.RequestHelper;
import cbm.commons.ResultadoOperacionBean;
import cbm.commons.SessionContainer;
import ejb.cbm.admin.bean.ArchivoBean;
import ejb.cbm.admin.local.ArchivoFacadeLocal;
import ejb.cbm.commons.ConstantsApp;
import ejb.cbm.commons.StackTrace2String;
import ejb.cbm.seguridad.bean.RegistroIngresoBean;
import ejb.cbm.seguridad.bean.UsuarioBean;

public class ConfiguracionArchivoController extends BaseController{
	
	public ArchivoFacadeLocal archivoFacadeLocal;

	public ModelAndView open(HttpServletRequest request, HttpServletResponse response){

		String paginaSig = resources.getString("configurar_archivos");
		
		return new ModelAndView(paginaSig);
	}

	public ModelAndView save(HttpServletRequest request, HttpServletResponse response){
		
		HttpSession session = request.getSession(false);
		String paginaSig = resources.getString("ajaxrequest");
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ResultadoOperacionBean.EXITO,ResultadoOperacionBean.TITULO_EXITO,ResultadoOperacionBean.MSGEXITO);
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		Context context = null;
		UsuarioBean usuarioLogeado = (UsuarioBean)sessionContainer.getSessionElement(ConstantsWeb.USUARIO);
		ArchivoBean archivoBean = null;
		
		String tituloPopUp = "";
		try{
			archivoBean = this.getFormularioAsBean(request);

			context = new InitialContext();
			archivoFacadeLocal=(ArchivoFacadeLocal)context.lookup("CBM/ArchivoFacade/local");
			archivoBean = archivoFacadeLocal.save(archivoBean,usuarioLogeado);
			
			archivoBean = archivoFacadeLocal.buscar(archivoBean.getCodigoarchivo());
			
			tituloPopUp = "Modificar Archivo";
			
		}catch(RuntimeException e){
			e.printStackTrace();
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al grabar");
			resultado.setMensaje(ConstantsWeb.MSGERROR);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}catch(NamingException e){
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al grabar");
			resultado.setMensaje(ConstantsWeb.MSGERROR);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}
		
		sessionContainer.addTemporal(ConstantsWeb.RESULTADO_OPERACION, resultado);
		sessionContainer.addTemporal(ConstantsWeb.ARCHIVO, archivoBean);
		sessionContainer.addTemporal(ConstantsWeb.TITULOPOPUP, tituloPopUp);
		
		return new ModelAndView(paginaSig,"responseText",resultado.getAsArrayJS());
	}

	public ModelAndView buscar(HttpServletRequest request, HttpServletResponse response){
		HttpSession session = request.getSession(false);
		String paginaSig = "administrativo/ConfigurarCargasTabla.jsp";
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ResultadoOperacionBean.EXITO,ResultadoOperacionBean.TITULO_EXITO,ResultadoOperacionBean.MSGEXITO);
		List<ArchivoBean> listResultado = null;
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		RegistroIngresoBean registroIngreso = (RegistroIngresoBean)sessionContainer.getSessionElement(ConstantsWeb.REGISTRO_INGRESO);
		ArchivoBean filtro = null;
		Context context = null;
		
		try{
			
			filtro = this.getFormularioAsBean(request);
			context = new InitialContext();
			archivoFacadeLocal =(ArchivoFacadeLocal)context.lookup("CBM/ArchivoFacade/local");

			listResultado = archivoFacadeLocal.buscar(filtro);
			
			if(listResultado.size()==0)listResultado = null;

		}catch(RuntimeException e){
			e.printStackTrace();
			paginaSig = resources.getString("pagina_error");
			resultado.setResultado(ResultadoOperacionBean.ERROR);
			resultado.setTitulo(ResultadoOperacionBean.TITULO_ERROR);
			resultado.setMensaje(ResultadoOperacionBean.MSGEXITO);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}catch(NamingException e){
			e.printStackTrace();
			paginaSig = resources.getString("pagina_error");
			resultado.setResultado(ResultadoOperacionBean.ERROR);
			resultado.setTitulo(ResultadoOperacionBean.TITULO_ERROR);
			resultado.setMensaje(ResultadoOperacionBean.MSGEXITO);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}
		
		sessionContainer.addTemporal(ConstantsWeb.GRILLA, listResultado);
		
		return new ModelAndView(paginaSig,ConstantsWeb.RPTA_AJAX_REQUEXT,resultado.getAsArrayJS());
	}

	public ModelAndView cargarArchivoHost(HttpServletRequest request, HttpServletResponse response){
		return null;
	}
	
	public ModelAndView eliminar(HttpServletRequest request, HttpServletResponse response){
		HttpSession session = request.getSession(false);
		String paginaSig = "administrativo/ConfigurarCargasTabla.jsp";
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ResultadoOperacionBean.EXITO,ResultadoOperacionBean.TITULO_EXITO,ResultadoOperacionBean.MSGEXITO);
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		UsuarioBean usuarioLogeado = (UsuarioBean)sessionContainer.getSessionElement(ConstantsWeb.USUARIO);
		RegistroIngresoBean registroIngreso = (RegistroIngresoBean)sessionContainer.getSessionElement(ConstantsWeb.REGISTRO_INGRESO);
		Context context = null;
		ArchivoBean archivoBean = null;
		List<ArchivoBean> lista = null;
		
		try{
			Long codigoArchivo = RequestHelper.getParameterLong(request,"hidCodigoArchivo");
			archivoBean = new ArchivoBean();
			archivoBean.setCodigoarchivo(codigoArchivo);
			archivoBean.setFechamodificacion(new Date(System.currentTimeMillis()));
			archivoBean.setUsuariomodificacion(registroIngreso.getCodigousuario());
			archivoBean.setFlagactivo(ConstantsApp.ESTADO_INACTIVO);
			
			context = new InitialContext();
			archivoFacadeLocal=(ArchivoFacadeLocal)context.lookup("CBM/ArchivoFacade/local");
			archivoFacadeLocal.save(archivoBean, usuarioLogeado);
			
			archivoBean = this.getFormularioAsBean(request);
			
			lista = archivoFacadeLocal.buscar(archivoBean);
			
			if (lista.size() == 0) lista=null;
			
		}catch(RuntimeException e){
			resultado.setResultado(ResultadoOperacionBean.ERROR);
			resultado.setTitulo(ResultadoOperacionBean.TITULO_ERROR);
			resultado.setMensaje(ResultadoOperacionBean.MSGERROR);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}catch(NamingException e){
			resultado.setResultado(ResultadoOperacionBean.ERROR);
			resultado.setTitulo(ResultadoOperacionBean.TITULO_ERROR);
			resultado.setMensaje(ResultadoOperacionBean.MSGERROR);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}
		sessionContainer.addTemporal(ConstantsWeb.GRILLA, lista);
		
		return new ModelAndView(paginaSig);
	}
	
	public ModelAndView openMantenimiento(HttpServletRequest request, HttpServletResponse response){
		String pagSig = "administrativo/ConfigurarCargasMnt.jsp";
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ResultadoOperacionBean.EXITO,ResultadoOperacionBean.TITULO_EXITO,ResultadoOperacionBean.MSGEXITO);
		HttpSession session = request.getSession(false);
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		Context context = null;
		ArchivoBean archivoBean = null;
		String tituloPopUp = "Nuevo Proceso Entrada";
		
		try{
			
			Long codigoArchivo = RequestHelper.getParameterLong(request,"codigoArchivo");
			archivoBean = new ArchivoBean();
			
			context = new InitialContext();
			archivoFacadeLocal=(ArchivoFacadeLocal)context.lookup("CBM/ArchivoFacade/local");
			
			if (codigoArchivo != null){
				archivoBean = archivoFacadeLocal.buscar(codigoArchivo);
				tituloPopUp = "Modificar Proceso Entrada";
			}

		}catch(RuntimeException e){
			resultado.setResultado(ResultadoOperacionBean.ERROR);
			resultado.setTitulo(ResultadoOperacionBean.TITULO_ERROR);
			resultado.setMensaje(ResultadoOperacionBean.MSGERROR);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}catch(NamingException e){
			resultado.setResultado(ResultadoOperacionBean.ERROR);
			resultado.setTitulo(ResultadoOperacionBean.TITULO_ERROR);
			resultado.setMensaje(ResultadoOperacionBean.MSGERROR);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}
		sessionContainer.addTemporal(ConstantsWeb.ARCHIVO, archivoBean);
		sessionContainer.addTemporal(ConstantsWeb.TITULOPOPUP, tituloPopUp);
		
		return new ModelAndView(pagSig);
	}
	
	public ArchivoBean getFormularioAsBean(HttpServletRequest request){
		
		ArchivoBean datosFormulario = new ArchivoBean();
		
		Long codigoArchivo   = RequestHelper.getParameterLong(request, "hidCodigoArchivo");
		Long tipoArchivo     = ConstantsApp.ARCHIVO_ENTRADA;
		String nombreArchivo = RequestHelper.getParameterString(request, "txtNombreArchivo");
		String descripcion   = RequestHelper.getParameterString(request, "txtDescripcion");
		String extension     = RequestHelper.getParameterString(request, "txtExtension");
		Long   flagActivo    = RequestHelper.getParameterLong(request, "selEstado");
		String rutaEntrada   = RequestHelper.getParameterString(request, "txtRutaEntrada");
		String rutaSalida    = RequestHelper.getParameterString(request, "rutaSalida");
		String tabla         = RequestHelper.getParameterString(request, "txtTabla");
		String sequence      = RequestHelper.getParameterString(request, "txtSequence");
		String correoElectronico = RequestHelper.getParameterString(request, "txtCorreoElectronico");
		
		datosFormulario.setCodigoarchivo(codigoArchivo);
		datosFormulario.setTipoarchivo(tipoArchivo);
		datosFormulario.setNombrearchivo(nombreArchivo);
		datosFormulario.setDescripcion(descripcion);
		datosFormulario.setExtension(extension);
		datosFormulario.setFlagactivo(flagActivo);
		datosFormulario.setRutaentrada(rutaEntrada);
		datosFormulario.setRutasalida(rutaSalida);
		datosFormulario.setTabla(tabla);
		datosFormulario.setSequence(sequence);
		datosFormulario.setCorreoelectronico(correoElectronico);
				
		return datosFormulario;
	}	
}
